Advanced Socket Programming এর উদাহরণ এবং প্রয়োগ

Computer Programming - ইউনিক্স সকেট (Unix Socket) Advanced Socket Programming (Advanced Socket Programming) |
239
239

Advanced Socket Programming এর উদাহরণ এবং প্রয়োগ

অ্যাডভান্সড সকেট প্রোগ্রামিং হল নেটওয়ার্ক প্রোগ্রামিংয়ের একটি উন্নত দিক, যেখানে সিস্টেমের কার্যকারিতা, স্কেলেবিলিটি এবং সিকিউরিটি নিশ্চিত করতে আরও জটিল এবং উন্নত কৌশল ব্যবহার করা হয়। এটি বিশেষভাবে ইন্টার-প্রসেস কমিউনিকেশন, একাধিক ক্লায়েন্ট সমর্থন, থ্রেডিং, নন-ব্লকিং I/O এবং সিকিউরড যোগাযোগের জন্য ব্যবহৃত হয়।

এখানে কিছু অ্যাডভান্সড সকেট প্রোগ্রামিংয়ের উদাহরণ এবং প্রয়োগ নিয়ে আলোচনা করা হবে।


১. নন-ব্লকিং সকেট (Non-blocking Sockets)

নন-ব্লকিং সকেট ব্যবহার করে একটি সকেটকে এমনভাবে কনফিগার করা যায় যে এটি কোনো ডেটা পাঠানোর জন্য অপেক্ষা করবে না, বরং অবিলম্বে কাজ করতে যাবে। এটি সাধারণত একাধিক ক্লায়েন্টের সাথে একই সময়ে যোগাযোগ করার জন্য ব্যবহৃত হয়।

উদাহরণ: নন-ব্লকিং TCP সার্ভার

import socket
import select

# সার্ভার সেটআপ
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setblocking(False)  # নন-ব্লকিং সকেট
server_socket.bind(('127.0.0.1', 65432))
server_socket.listen(5)

# সিলেক্ট ফাংশন ব্যবহার করে নেটওয়ার্ক আই/ও অপারেশন
inputs = [server_socket]

while True:
    readable, _, _ = select.select(inputs, [], [])
    
    for s in readable:
        if s is server_socket:
            client_socket, client_address = s.accept()
            print(f"Client connected: {client_address}")
            client_socket.setblocking(False)
            inputs.append(client_socket)
        else:
            data = s.recv(1024)
            if data:
                print(f"Received data: {data.decode()}")
            else:
                print(f"Client disconnected")
                inputs.remove(s)
                s.close()

এখানে, সার্ভার নন-ব্লকিং মোডে থাকে, তাই এটি একটি ক্লায়েন্টের সাথে সংযোগ করার জন্য ব্লক হবে না। select.select() ব্যবহার করে সার্ভার একাধিক ক্লায়েন্ট থেকে আসা ডেটা একযোগে গ্রহণ করতে পারে।


২. থ্রেডেড সার্ভার (Multithreaded Server)

একটি থ্রেডেড সার্ভার একাধিক ক্লায়েন্টের সাথে একযোগে যোগাযোগ করতে সক্ষম, যেখানে প্রতিটি ক্লায়েন্টের জন্য আলাদা থ্রেড তৈরি করা হয়। এটি কার্যকারিতা বাড়ানোর জন্য ব্যবহৃত হয়, বিশেষত যখন অনেক ক্লায়েন্ট একসাথে সার্ভারে সংযোগ করে।

উদাহরণ: থ্রেডেড TCP সার্ভার

import socket
import threading

def handle_client(client_socket):
    with client_socket:
        print("Client connected")
        while True:
            data = client_socket.recv(1024)
            if not data:
                break
            print(f"Received data: {data.decode()}")
            client_socket.sendall(data)
        print("Client disconnected")

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('127.0.0.1', 65432))
server_socket.listen(5)

print("Server listening on port 65432")

while True:
    client_socket, client_address = server_socket.accept()
    print(f"Connection from {client_address}")
    client_thread = threading.Thread(target=handle_client, args=(client_socket,))
    client_thread.start()

এখানে, প্রতি ক্লায়েন্টের জন্য একটি নতুন থ্রেড তৈরি করা হয়, যা ক্লায়েন্টের সাথে আলাদা করে যোগাযোগ স্থাপন করে।


৩. আসিঙ্ক্রোনাস সকেট প্রোগ্রামিং (Asynchronous Socket Programming)

আসিঙ্ক্রোনাস সকেট প্রোগ্রামিং একটি শক্তিশালী পদ্ধতি যা নেটওয়ার্ক অপারেশনগুলিকে ব্যাকগ্রাউন্ডে সম্পন্ন করতে সাহায্য করে। এর ফলে মূল থ্রেড ব্লক না হয়ে অন্যান্য কাজ করতে পারে।

উদাহরণ: আসিঙ্ক্রোনাস TCP সার্ভার (Python asyncio ব্যবহার করে)

import asyncio

async def handle_client(reader, writer):
    data = await reader.read(100)
    message = data.decode()
    addr = writer.get_extra_info('peername')
    print(f"Received {message} from {addr}")
    
    response = f"Hello, {message}"
    writer.write(response.encode())
    await writer.drain()

    print("Closing the connection")
    writer.close()

async def main():
    server = await asyncio.start_server(
        handle_client, '127.0.0.1', 65432)
    
    addr = server.sockets[0].getsockname()
    print(f"Serving on {addr}")

    async with server:
        await server.serve_forever()

asyncio.run(main())

এখানে, asyncio লাইব্রেরি ব্যবহার করা হয়েছে যাতে মূল থ্রেড ব্লক না হয়। যখন একটি ক্লায়েন্ট সংযোগ করে, তখন handle_client() আসিঙ্ক্রোনাসভাবে কাজ করে এবং সার্ভারটি অন্যান্য ক্লায়েন্টদের জন্য উন্মুক্ত থাকে।


৪. SSL/TLS এনক্রিপটেড সকেট (SSL/TLS Encrypted Socket)

এটি নিরাপত্তা নিশ্চিত করার জন্য ব্যবহৃত হয়, যেখানে সার্ভার এবং ক্লায়েন্টের মধ্যে আদান-প্রদান করা ডেটা এনক্রিপ্ট করা থাকে। SSL/TLS প্রোটোকলগুলি সুরক্ষিত সংযোগ প্রতিষ্ঠা করতে সাহায্য করে।

উদাহরণ: SSL/TLS সকেট সার্ভার (Python ssl লাইব্রেরি ব্যবহার)

import socket
import ssl

# সার্ভার সেটআপ
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('127.0.0.1', 65432))
server_socket.listen(5)

# SSL সুরক্ষিত সকেট তৈরি করা
ssl_socket = ssl.wrap_socket(server_socket, keyfile="server.key", certfile="server.crt", server_side=True)

print("Server listening on port 65432")

while True:
    client_socket, client_address = ssl_socket.accept()
    print(f"Connection from {client_address}")
    data = client_socket.recv(1024)
    print(f"Received: {data.decode()}")
    client_socket.sendall(b"Hello, secure world!")
    client_socket.close()

এখানে, ssl.wrap_socket() ব্যবহার করা হয়েছে যাতে সার্ভারের সকেট SSL/TLS এনক্রিপশনে রূপান্তরিত হয়, এবং ক্লায়েন্টের সাথে নিরাপদভাবে ডেটা আদান-প্রদান করা যায়।


৫. মাল্টিকাস্ট সকেট (Multicast Socket)

মাল্টিকাস্ট সকেট একযোগে একাধিক ক্লায়েন্টের কাছে ডেটা পাঠানোর জন্য ব্যবহৃত হয়। এটি বিশেষভাবে স্ট্রিমিং সার্ভিস বা ডেটা বিতরণের জন্য উপকারী।

উদাহরণ: মাল্টিকাস্ট TCP সার্ভার

import socket
import struct

multicast_group = ('224.1.1.1', 10000)

# সকেট  সেটআপ
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# মাল্টিকাস্ট সকেট কনফিগার করা
server_socket.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 255)

# বার্তা পাঠানো
message = b"This is a multicast message!"
server_socket.sendto(message, multicast_group)

এখানে, একটি মাল্টিকাস্ট গন্তব্য (224.1.1.1) সেট করা হয়েছে এবং সেই ঠিকানায় বার্তা পাঠানো হচ্ছে।


উপসংহার

অ্যাডভান্সড সকেট প্রোগ্রামিংয়ের মাধ্যমে, উন্নত প্রযুক্তি যেমন নন-ব্লকিং I/O, থ্রেডিং, আসিঙ্ক্রোনাস I/O, SSL/TLS এনক্রিপশন, এবং মাল্টিকাস্ট সোসকেটের ব্যবহার সম্ভব। এই প্রোগ্রামিং কৌশলগুলি একাধিক ক্লায়েন্ট, নিরাপদ সংযোগ, এবং উচ্চ কার্যকারিতার জন্য প্রয়োজনীয়।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion